package com.defeng.product.service.impl;

import java.util.List;

import com.defeng.common.core.utils.DateUtils;
import com.defeng.common.core.utils.uuid.IdUtils;
import com.defeng.common.security.utils.SecurityUtils;
import com.defeng.product.domain.MallProductRuleCenter;
import com.defeng.product.domain.request.MallProductRequest;
import com.defeng.product.domain.response.MallProductResponse;
import com.defeng.product.mapper.MallProductInfoMapper;
import com.defeng.product.service.IMallProductRuleCenterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.defeng.product.domain.MallProductInfo;
import com.defeng.product.service.IMallProductInfoService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 商品信息Service业务层处理
 * 
 * @author XieDeFeng
 * @date 2022-07-01
 */
@Service
public class MallProductInfoServiceImpl implements IMallProductInfoService 
{
    @Autowired
    private MallProductInfoMapper mallProductInfoMapper;
    @Autowired
    private IMallProductRuleCenterService iMallProductRuleCenterService;

    /**
     * 查询商品信息
     * 
     * @param id 商品信息主键
     * @return 商品信息
     */
    @Override
    public MallProductInfo selectMallProductInfoById(String id)
    {
        return mallProductInfoMapper.selectMallProductInfoById(id);
    }
    @Override
    public MallProductResponse selectMallProductResponseById(String id)
    {
        MallProductResponse mallProductResponse = mallProductInfoMapper.selectMallProductResponseById(id);
        MallProductRuleCenter mallProductRuleCenter = new MallProductRuleCenter();
        mallProductRuleCenter.setProductId(id);
        List<MallProductRuleCenter> mallProductRuleCenters = iMallProductRuleCenterService.selectMallProductRuleCenterList(mallProductRuleCenter);
        mallProductResponse.setProductRuleCenterList(mallProductRuleCenters);
        return mallProductResponse;
    }

    /**
     * 查询商品信息列表
     * 
     * @param mallProductInfo 商品信息
     * @return 商品信息
     */
    @Override
    public List<MallProductResponse> selectMallProductInfoList(MallProductInfo mallProductInfo)
    {
        return mallProductInfoMapper.selectMallProductInfoList(mallProductInfo);
    }

    /**
     * 新增商品信息
     * 
     * @param mallProductRequest 商品信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertMallProductInfo(MallProductRequest mallProductRequest)
    {
        mallProductRequest.setId(IdUtils.simpleUUID());
        mallProductRequest.setCreateBy(SecurityUtils.getUsername());
        mallProductRequest.setCreateTime(DateUtils.getNowDate());
        List<MallProductRuleCenter> productRuleCenterList = mallProductRequest.getProductRuleCenterList();
        int i =mallProductInfoMapper.insertMallProductInfo(mallProductRequest);
        productRuleCenterList.forEach(productRuleCenter ->{
                productRuleCenter.setProductId(mallProductRequest.getId());
                iMallProductRuleCenterService.insertMallProductRuleCenter(productRuleCenter);
                });
        return i;
    }

    /**
     * 修改商品信息
     * 
     * @param mallProductRequest 商品信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateMallProductInfo(MallProductRequest mallProductRequest)
    {
        mallProductRequest.setUpdateBy(SecurityUtils.getUsername());
        mallProductRequest.setUpdateTime(DateUtils.getNowDate());
        iMallProductRuleCenterService.deleteMallProductRuleCenterProductId(mallProductRequest.getId());
        //TODO 11111
        List<MallProductRuleCenter> productRuleCenterList = mallProductRequest.getProductRuleCenterList();

        productRuleCenterList.forEach(productRuleCenter ->{
            productRuleCenter.setProductId(mallProductRequest.getId());
            iMallProductRuleCenterService.insertMallProductRuleCenter(productRuleCenter);
        });
        return mallProductInfoMapper.updateMallProductInfo(mallProductRequest);
    }

    /**
     * 批量删除商品信息
     * 
     * @param ids 需要删除的商品信息主键
     * @return 结果
     */
    @Override
    public int deleteMallProductInfoByIds(String[] ids)
    {
        return mallProductInfoMapper.deleteMallProductInfoByIds(ids);
    }

    /**
     * 删除商品信息信息
     * 
     * @param id 商品信息主键
     * @return 结果
     */
    @Override
    public int deleteMallProductInfoById(String id)
    {
        return mallProductInfoMapper.deleteMallProductInfoById(id);
    }
}
